import { useConfig } from "./D8dConfigProvider.tsx";
import dayjs from "dayjs";
// 正确导入 UTC 插件
import utc from "dayjs/plugin/utc.js"; // 引入 dayjs 的 UTC 插件
import type { FormItemConfigs } from "../global.ts";
// 使用 UTC 插件
dayjs.extend(utc);

interface Props {
  editFormFieldConfig?: FormItemConfigs[];
  // 其他属性...
}

export const useHandleFormData = (props: Props) => {
  const { getSrc } = useConfig();

  const handleEditSubmitFormData = (values: any) => {
    // 调用接口
    const body = { ...values };
    const 表单字段配置 = props.editFormFieldConfig;

    // console.log("handleEditFormData", body, 表单字段配置);

    const newBody = {} as any;

    // 处理表单数据
    Object.keys(body).forEach((key) => {
      const 字段值 = body[key];
      const 字段配置 = 表单字段配置?.find((item) => key === item.name);

      if (字段值 === null) {
        delete body[key];
        // } else if (typeof 字段配置?.submit === "function") {
        //   body[key] = 字段配置?.submit({ value: body[key], config: 字段配置 });
      } else if (字段配置?.type === "upload") {
        const fieldValue = 字段值;
        if (Array.isArray(fieldValue) && fieldValue?.length > 0) {
          const maxCount = 字段配置?.maxCount ? 字段配置?.maxCount : 1;
          if (maxCount > 1) {
            newBody[key] = JSON.stringify(
              fieldValue.map((item) => item?.response ?? item?.url)
            );
          } else {
            newBody[key] = fieldValue[0]?.response ?? fieldValue[0]?.url;
          }
        } else {
          newBody[key] = "";
        }
      } else if (字段配置?.type === "cascader") {
        if (Array.isArray(字段值) && 字段值?.length > 0) {
          newBody[key] = 字段值?.join(",");
        }
      } else if (字段配置?.type === "select") {
        if (字段配置?.mode === "multiple") {
          newBody[key] = 字段值?.join(",");
        } else {
          newBody[key] = 字段值;
        }
      } else if (字段配置?.type === "date" || 字段配置?.type === "dateRange") {
        // if (Array.isArray(字段值) && 字段值?.length > 0) {
        //   newBody[key] = 字段值.map((item) =>
        //     parseInt((dayjs(item).valueOf() / 1000).toString())
        //   );
        // } else if (字段值) {
        //   newBody[key] = parseInt((dayjs(字段值).valueOf() / 1000).toString());
        // }
        if (Array.isArray(字段值) && 字段值?.length > 0) {
          newBody[key] = 字段值
            .map((item) =>
              //转成UTC时间
              dayjs(item).utc().format("YYYY-MM-DD HH:mm:ss")
            )
            .join(",");
        } else if (字段值) {
          newBody[key] = dayjs(字段值).utc().format("YYYY-MM-DD HH:mm:ss");
        }
      } else if (字段配置?.type === "time" || 字段配置?.type === "timeRange") {
        if (Array.isArray(字段值) && 字段值?.length > 0) {
          newBody[key] = 字段值
            .map((item) => dayjs(item).format("HH:mm:ss"))
            .join(",");
        } else if (字段值) {
          newBody[key] = dayjs(字段值).format("HH:mm:ss");
        }
      } else {
        if (typeof 字段值 === "object") {
          try {
            newBody[key] = JSON.stringify(字段值);
          } catch (e) {}
        } else {
          newBody[key] = 字段值;
        }
      }
    });

    // console.log('表单数据',param.表单数据)
    // console.log('表单字段配置',表单字段配置)
    // console.log('body',body)

    return newBody;
  };

  const handleEditFormData = (values: any) => {
    const 行数据 = { ...values };
    const 表单字段配置 = props.editFormFieldConfig;
    // console.log("handleEditFormData", 行数据, 表单字段配置);

    const newBody = {} as any;
    // 处理表单数据
    Object.keys(行数据).forEach((key) => {
      const 字段配置 = 表单字段配置?.find((item) => key === item.name);
      if (字段配置?.type === "upload") {
        try {
          const 字段值 = JSON.parse(行数据[key]);
          if (Array.isArray(字段值) && 字段值?.length > 0) {
            const fileList = 字段值.map((item, index) => ({
              uid: index.toString(),
              url: getSrc(item),
              response: item,
              status: "done",
            }));
            newBody[key] = fileList;
            // } else if (字段值) {
            //   newBody[key] = {
            //     fileList: [
            //       {
            //         uid: "1",
            //         url: getSrc(字段值),
            //         status: "done",
            //       },
            //     ],
            //   };
          } else {
            newBody[key] = [];
          }
        } catch (e) {
          // console.log(e);
          const 字段值 = 行数据[key];
          if (字段值) {
            // newBody[key] = [
            //   {
            //     uid: "1",
            //     url: getSrc(字段值),
            //     response: 字段值,
            //     status: "done",
            //   },
            // ];
            newBody[key] = [
              {
                uid: "1",
                url: getSrc(字段值),
                response: 字段值,
                status: "done",
              },
            ];
          } else {
            newBody[key] = [];
          }
        }
      } else if (字段配置?.type === "cascader") {
        newBody[key] = 行数据[key]?.split(",");
      } else if (字段配置?.type === "select") {
        if (字段配置?.mode === "multiple") {
          newBody[key] = 行数据[key]?.split(",");
        } else {
          newBody[key] = 行数据[key];
        }
      } else if (字段配置?.type === "date") {
        if (行数据[key]) {
          newBody[key] = dayjs(行数据[key]);
        }
      } else if (字段配置?.type === "dateRange") {
        if (行数据[key]) {
          const arr = 行数据[key]?.split(",");
          if (arr?.length > 0) {
            newBody[key] = [dayjs(arr[0]), dayjs(arr[1])];
          } else {
            newBody[key] = [];
          }
        }
      } else if (字段配置?.type === "time") {
        if (行数据[key]) {
          newBody[key] = dayjs(行数据[key], "HH:mm:ss");
        }
      } else if (字段配置?.type === "timeRange") {
        if (行数据[key]) {
          const arr = 行数据[key]?.split(",");
          if (arr?.length > 0) {
            newBody[key] = [
              dayjs(arr[0], "HH:mm:ss"),
              dayjs(arr[1], "HH:mm:ss"),
            ];
          } else {
            newBody[key] = [];
          }
        }
      } else {
        newBody[key] = 行数据[key];
      }
    });
    // console.log("handleEditFormData", 行数据, newBody);

    return newBody;
  };

  return {
    handleEditSubmitFormData,
    handleEditFormData,
  };
};
